package com.zkthink.ceres.product.dao;

import com.baomidou.mybatisplus.annotation.SqlParser;
import com.zkthink.base.mapper.SuperMapper;
import com.zkthink.ceres.product.dto.*;
import com.zkthink.ceres.product.entity.Product;

import com.zkthink.ceres.product.entity.TenantProduct;
import com.zkthink.ceres.promotion.vo.web.PromotionShowVO;
import com.zkthink.ceres.promotion.vo.web.PromotionVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * <p>
 * Mapper 接口
 * 商品表
 * </p>
 *
 * @author JustArgo
 * @date 2020-05-03
 */
@Repository
public interface ProductMapper extends SuperMapper<Product> {

    /** 根据三级类目id列表查询商品数量
     * @author JustArgo 2020/5/7 21:58
     * @return
     */
    Integer selectCountByCategoryIdList(@Param("categoryIdList") List<Long> categoryIdList);

    /** 根据分组id查询商品数量
     * @author JustArgo 2020/5/7 21:57
     * @return
     */
    Integer selectCountByProductGroupId(@Param("groupId") Long groupId);

    /**
     * 上架商品
     * @param id
     * @return
     */
    int onlineProduct(Long id);

    /** 下架商品
     * @author JustArgo 2020/5/9 11:57
     * @return
     */
    int offlineProduct(Long id);

    /** 逻辑删除商品
     * @author JustArgo 2020/5/9 11:58
     * @return
     */
    int delProductById(Long id);

    /** 查询出带有商户编号的商品信息
     * @author JustArgo 2020/5/12 9:16
     * @return
     */
    TenantProduct getByIdWithTenant(Long id);

    /** 管理后台搜索列表
     * @author JustArgo 2020/5/14 12:37
     * @return
     */
    List<Product> selectAdminProductListByCondition(AdminProductDTO dto);

    /** 查询后台搜索列表总数
     * @author JustArgo 2020/5/14 18:39
     * @return
     */
    Integer selectCountAdminProductListByCondition(AdminProductDTO dto);

    /** 查询店铺下的商品的销量
     * @author JustArgo 2020/5/18 1:26
     * @return
     */
    Integer selectStoreSellCount(Long storeId);

    /** 搜索商品
     * @author JustArgo 2020/5/19 22:42
     * @return
     */
    List<Product> searchItem(@Param("keyword") String keyword, @Param("category3Id")Long category3Id, @Param("promotionId") Long promotionId,
                             @Param("start") int start, @Param("pageSize") int pageSize);

    /** 搜索商品的数量
     * @author JustArgo 2020/5/24 14:05
     * @return
     */
    Integer searchItemCount(@Param("keyword")String keyword, @Param("category3Id")Long category3Id, @Param("promotionId") Long promotionId);

    /** 更新指定商品的库存
     * @author JustArgo 2020/5/23 20:12
     * @return
     */
    void updateStock(@Param("productId") Long productId, @Param("stock") Integer stock);

    /** 查找商品
     * @author JustArgo 2020/5/27 21:00
     * @return
     */
    List<Product> findAdminStoreProductList(AdminStoreProductDTO adminStoreProductDTO);

    /** 查找商品
     * @author JustArgo 2020/5/27 21:00
     * @return
     */
    Integer findAdminStoreProductListCount(AdminStoreProductDTO adminStoreProductDTO);

    /** 查询商品的购买数量
     * @author JustArgo 2020/5/27 21:42
     * @return
     */
    @SqlParser(filter = true)
    Integer getProductBuyCount(Long productId);

    /** 更正商品的价格
     * @author JustArgo 2020/5/27 23:47
     * @return
     */
    int updateProductPrice(Long id);

    /** 查询店铺id的数量
     * @author JustArgo 2020/5/28 0:59
     * @return
     */
    Integer findProductGroupCount();

    /** 查询店铺id列表
     * @author JustArgo 2020/5/28 0:59
     * @return
     */
    List<Long> findProductGroupList(@Param("start")int start, @Param("pageSize")Integer pageSize);

    /** 根据分组id分页查询商品
     * @author JustArgo 2020/5/28 21:17
     * @return
     */
    List<Product> findProductListByGroupId(ProductListByGroupIdQueryDTO productListByGroupIdQueryDTO);

    /** 平台查询商品
     * @author JustArgo 2020/5/30 18:04
     * @return
     */
    @SqlParser(filter = true)
    List<Product> selectPlatformAdminProductListByCondition(AdminProductDTO dto);

    /** 平台查询商品列表总数
     * @author JustArgo 2020/5/30 18:06
     * @return
     */
    @SqlParser(filter = true)
    Integer selectPlatformCountAdminProductListByCondition(AdminProductDTO dto);

    /** 根据商品id列表查询
     * @author JustArgo 2020/5/31 2:39
     * @return
     */
    @SqlParser(filter = true)
    List<Product> selectListIgnoreTenant(List<Long> productIdList);

    /** 根据多个3级类目id查询
     * @author JustArgo 2020/5/31 2:39
     * @return
     */
    @SqlParser(filter = true)
    List<Product> selectByCategoryIdListIgnoreTenant(List<Long> category3IdList);

    /** 更新商品的销量
     * @author 黄永宗 2020/6/6 18:02
     * @return
     */
    void updateSellCount(@Param("productId")Long productId, @Param("sellCount")Integer sellCount);

    /** 查询店铺下的商品销量总和
     * @author 善泉 2020/6/21 15:07
     * @return
     */
	Long selectStoreSumSellCount(Long storeId);

	/** 查询符合条件的商品关联的活动
	 * @author 善泉 2020/6/28 20:07
	 * @return
	 */
	List<PromotionShowVO> searchItemPromotion(@Param("keyword")String keyword, @Param("category3Id")Long category3Id);
}
